package com.util;

import java.awt.*;
import java.io.IOException;
import java.net.URL;
import javax.media.*;
import javax.swing.*;

public class MediaPanel extends JPanel
{
    private Player mediaPlayer;
    
    /**
     * Cria um painel multimidia, podendo exibir imagem, video ou tocar audio.
     * @param mediaURL caminho para a multimidia
     */
    public MediaPanel( URL mediaURL )
    {
        setLayout( new BorderLayout() );

        Manager.setHint( Manager.LIGHTWEIGHT_RENDERER, true );

        try
        {
            
             String path = mediaURL.toURI().toURL().toString();
             //Tipos de imagem validos.
             if (path.endsWith(".jpg") || path.endsWith(".png") || path.endsWith(".jpeg")
                     || path.endsWith(".bmp") || path.endsWith(".gif"))
             {
                 //Cria um image icon e o adiciona ao panel
                 ImageIcon img = new ImageIcon(mediaURL.toURI().toURL());
                 JLabel imgLabel = new JLabel(img);
                 add(imgLabel, BorderLayout.CENTER);
             }
             else 
             {
                 mediaPlayer = Manager.createRealizedPlayer( mediaURL );

                 Component video = mediaPlayer.getVisualComponent();
                 Component controls = mediaPlayer.getControlPanelComponent();

                 if ( video != null )
                    add( video, BorderLayout.CENTER );

                 if ( controls != null )
                    add( controls, BorderLayout.SOUTH );

                 mediaPlayer.start();
            }
        }
        catch ( NoPlayerException noPlayerException )
        {
            System.err.println( "Midia incompativel." );
        }
        catch ( CannotRealizeException cannotRealizeException )
        {
            System.err.println( "Nao foi possivel criar o player." );
        }
        catch ( IOException iOException )
        {
            System.err.println( "Erro ao tentar ler arquivo selecionado." );
        } catch (Exception e)
        {
            System.err.printf(e.getMessage(), e);
        }
    }
    
    /**
     * Metodo utilizado para acessar o player de fora da classe MediaPanel.
     * @return o objeto Player atual.
     */
    public Player getPlayer ()
    {
        return this.mediaPlayer;
    }
}